/* Copyright Statement:
 *
 * This software/firmware and related documentation ("MediaTek Software") are
 * protected under relevant copyright laws. The information contained herein is
 * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
 * the prior written permission of MediaTek inc. and/or its licensors, any
 * reproduction, modification, use or disclosure of MediaTek Software, and
 * information contained herein, in whole or in part, shall be strictly
 * prohibited.
 *
 * MediaTek Inc. (C) 2010. All rights reserved.
 *
 * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
 * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
 * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
 * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
 * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
 * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
 * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
 * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
 * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
 * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
 * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
 * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
 * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
 * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
 * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
 * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
 * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
 * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
 *
 * The following software/firmware and/or related documentation ("MediaTek
 * Software") have been modified by MediaTek Inc. All revisions are subject to
 * any receiver's applicable license agreements with MediaTek Inc.
 */

package com.mediatek.datatransfer;

import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

/**
 * Describe class RecordXmlParser here.
 * 
 * @author
 * @version 1.0
 */
public class RecordXmlParser {
	/**
	 * Creates a new <code>RecordXmlParser</code> instance.
	 * 
	 */
	public RecordXmlParser() {

	}

	public static ArrayList<RecordXmlInfo> parse(String recordString) {
		RecordXmlInfo record = null;
		ArrayList<RecordXmlInfo> list = new ArrayList<RecordXmlInfo>();
		try {
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
			XmlPullParser parser = factory.newPullParser();
			parser.setInput(new StringReader(recordString));

			int eventType = parser.getEventType();
			String tagName = "";
			while (eventType != XmlPullParser.END_DOCUMENT) {
				switch (eventType) {
				case XmlPullParser.START_DOCUMENT:
					break;

				case XmlPullParser.START_TAG:
					record = new RecordXmlInfo();
					tagName = parser.getName();
					if (tagName.equals(RecordXmlInfo.RESTORE)) {
						record.setRestore(true);
						int attrNum = parser.getAttributeCount();
						for (int i = 0; i < attrNum; ++i) {
							String name = parser.getAttributeName(i);
							String value = parser.getAttributeValue(i);
							setRecordXmlInfo(record, name, value);
						}
					} else if (tagName.equals(RecordXmlInfo.BACKUP)) {
						record.setRestore(false);
						int attrNum = parser.getAttributeCount();
						for (int i = 0; i < attrNum; ++i) {
							String name = parser.getAttributeName(i);
							String value = parser.getAttributeValue(i);
							setRecordXmlInfo(record, name, value);
						}
					}
					break;

				case XmlPullParser.END_TAG:
					if ((parser.getName().equals(RecordXmlInfo.BACKUP) || parser
							.getName().equals(RecordXmlInfo.RESTORE))
							&& record != null) {
						list.add(record);
					}
					break;

				case XmlPullParser.END_DOCUMENT:
					break;

				default:
					break;
				}

				eventType = parser.next();
			}
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return list;
	}

	public static void setRecordXmlInfo(RecordXmlInfo record, String name,
			String value) {
		if (name.equals(RecordXmlInfo.DEVICE)) {
			record.setDevice(value);
		} else if (name.equals(RecordXmlInfo.TIME)) {
			record.setTime(value);
		} else if (name.equals(RecordXmlInfo.CONTACT)) {
			record.setmContact(value);
		} else if (name.equals(RecordXmlInfo.MESSAGE)) {
			record.setmMessage(value);
		} else if (name.equals(RecordXmlInfo.PICTURE)) {
			record.setmPicture(value);
		} else if (name.equals(RecordXmlInfo.CALENDAR)) {
			record.setmCalendar(value);
		} else if (name.equals(RecordXmlInfo.MUSIC)) {
			record.setmMusic(value);
		} else if (name.equals(RecordXmlInfo.BOOKMARK)) {
			record.setmBookmark(value);
		} else if (name.equals(RecordXmlInfo.NOTEBOOK)) {
			record.setmNotebook(value);
		}
	}
}
